package interview.demo3;

/**
 * 递归:
 *  条件：
 *      递归出口(终止递归的条件)
 *      递归表达式(规律)
 *
 * @author
 * @create 2018-10-13 8:48
 **/
public class RecursionTest2 {


    public static void main(String[] args) {

        //求数组中的最大值
        int[] arrays = {2, 3, 4, 5, 1, 5, 2, 9, 5, 6, 8, 3, 2};
        int max = findByArrayMax(arrays, 0, arrays.length - 1);

        System.out.println(max);

    }

    /**
     * 求数组中的最大值
     * @param array
     * @param left
     * @param right
     * @return
     */
    public static int findByArrayMax(int[] array, int left, int right) {

        int max = 0;

        //递归出口，当左边界和右边界相等的时候，则只有一个数，该数为最大
        if (left == right) {
            max = array[left];
        } else {
            //获取左边界的值
            int a = array[left];
            //获取整体右边数组的最大值
            int b = findByArrayMax(array, left + 1, right);
            //将左边值，与右边整体数组的最大值进行比较
            if (a > b) {
                max = a;
            } else {
                max = b;
            }
        }
        return max;
    }


}
